﻿//using System;
//using System.Collections.Generic;
//using System.Data.Services.Client;
//using System.Diagnostics;
//using System.Linq;
//using Microsoft.WVB.Framework;
//using Microsoft.WVB.Services;
//using Microsoft.VisualStudio.TestTools.UnitTesting;


//namespace Microsoft.WVB.UnitTest.Client
//{
//    [TestClass]
//    public class EPGFeedServiceTest
//    {
//        IDIContainer dic = null;
//        DataFeedService service = null;
//        AsyncCallback asyncCallback = null;

//        EventHandler<ExecuteQueryCompletedEventArgs> rateHandler = null;
//        EventHandler<ExecuteQueryCompletedEventArgs> propHandler = null;
        
//        private int _ratingId;
//        private int _ratingNumberId;
//        private int _durationId;
//        private int _priceId;

//        [TestMethod]
//        public void AppInit()
//        {
//            IoC.InitializeApplicationResources(App.Current);

//            //Register Services here 
//            dic = IoC.GetCurrentApplicationDIContainer();
//            dic.Configuration["DataService_EPG"] = new Uri("http://localhost:8080/CDNDataService.svc");
//            dic.Register<DataFeedService>((c) => new EPGFeedService(c.GetNamedConfigurationItem<Uri>("DataService_EPG"), new EPGEntityVisitor()));
//        }

//        //[TestMethod]
//        //public void DataServicesRequest()
//        //{
//        //    DataServiceContext ctx = new DataServiceContext(new Uri("http://localhost:8080/CDNDataService.svc"));
            
//        //    DataServiceQuery<Broadcaster> q = ctx.CreateQuery<Broadcaster>("Broadcasters");
//        //    asyncCallback = new AsyncCallback(callback);

//        //    q.BeginExecute(asyncCallback, q);
//        //}

//        //public void callback(IAsyncResult iaSyncResult)
//        //{
//        //    DataServiceQuery<Broadcaster> q = iaSyncResult.AsyncState as DataServiceQuery<Broadcaster>;
//        //    IEnumerable<Broadcaster> bCollection = q.EndExecute(iaSyncResult);
//        //}

//        // http://localhost:8080/CDNDataService.svc/PropramProperties(programid=1,pvid=3)/PropertyInfo/Name/$value

//        //private void onRaiseGetRating(object e)
//        //{
//        //    ExecuteQueryCompletedEventArgs args = e as ExecuteQueryCompletedEventArgs;
//        //    if (args != null)
//        //    {
//        //        IEnumerable<ProgramPropertyInfo> ie = args.Result as IEnumerable<ProgramPropertyInfo>;
//        //        if (ie != null)
//        //        {
//        //            var q = (from p in ie
//        //                     where (p.Name == "Rating" ||
//        //                     p.Name == "NumberOfRating")
//        //                     select new { Name = p.Name, ID = p.ID });

//        //            //_durationId = ie.FirstOrDefault((pp) => pp.Name == "Duration").ID;
//        //            _ratingId = q.FirstOrDefault((v) => v.Name == "Rating").ID;
//        //            Debug.WriteLine("RatingID =" + _ratingId);
//        //            _ratingNumberId = q.FirstOrDefault((v) => v.Name == "NumberOfRating").ID;
//        //            Debug.WriteLine("RatingNumberOf = " + _ratingNumberId);
//        //            //_priceId = ie.FirstOrDefault((pp) => pp.Name == "Price").ID;
//        //        }
//        //    }
//        //}

//        //[TestMethod]
//        //public void TestCalls()
//        //{

//        //    //DataFeedService feedSvc = IoC.GetCreate<DataFeedService>();
//        //    //string uri = String.Format("{0}/ProgramPropertyInfoCollection", feedSvc.RootService);
//        //    //AsyncOperation op = AsyncOperationManager.CreateOperation(Guid.NewGuid());

//        //    //SendOrPostCallback rating = new SendOrPostCallback(onRaiseGetRating);
            

//        //    //if (propHandler == null)
//        //    //{
//        //    //     propHandler = delegate(object sender, ExecuteQueryCompletedEventArgs e)
//        //    //    {
                    
//        //    //        if ((String)e.UserState == "R")
//        //    //        {
//        //    //            Double rate = ((IEnumerable<Double>)e.Result).FirstOrDefault();
//        //    //            Debug.WriteLine("rating is:" + rate);
//        //    //        }
//        //    //        else if ((String)e.UserState == "P")
//        //    //        {
//        //    //            IEnumerable<ProgramPropertyInfo> ie = e.Result as IEnumerable<ProgramPropertyInfo>;
//        //    //            if (ie != null)
//        //    //            {
//        //    //                var q = (from p in ie
//        //    //                         where (p.Name == "Rating" ||
//        //    //                         p.Name == "NumberOfRating")
//        //    //                         select new { Name = p.Name, ID = p.ID }).AsQueryable();

//        //    //                //_durationId = ie.FirstOrDefault((pp) => pp.Name == "Duration").ID;
//        //    //                _ratingId = q.FirstOrDefault((v) => v.Name == "Rating").ID;
//        //    //                Debug.WriteLine("RatingID =" + _ratingId);
//        //    //                _ratingNumberId = q.FirstOrDefault((v) => v.Name == "NumberOfRating").ID;
//        //    //                Debug.WriteLine("RatingNumberOf = " + _ratingNumberId);
//        //    //                //_priceId = ie.FirstOrDefault((pp) => pp.Name == "Price").ID;
//        //    //            }
//        //    //        }
//        //    //    };                
//        //    //}
//        //    //feedSvc.ExecuteQueryCompleted += propHandler;
//        //    //service.ExecuteQueryAsync<ProgramPropertyInfo>(new Uri(uri, UriKind.Absolute), "P");
//        //}
        
//        [TestMethod]
//        public void OperationTest()
//        {
//            service = dic.GetCreate<DataFeedService>();
//            AsyncCallback ar = null;

//            Framework.DataServiceEntities.DbEntities d = new Microsoft.WVB.Framework.DataServiceEntities.DbEntities(service.RootService);
//            d.MergeOption = MergeOption.PreserveChanges;
//            DataServiceQuery<Framework.DataServiceEntities.ProgramPropertyInfo> query = d.ProgramPropertyInfoCollection;
//            //string req = service.RootService + "/ProgramPropertyInfoCollection";
//            //Uri ur = new Uri(req, UriKind.Absolute);
//            //System.Data.Services.Client.DataServiceContext c = new System.Data.Services.Client.DataServiceContext(service.RootService);

//            ar = iasyncResult =>
//                {
//                    DataServiceQuery<Framework.DataServiceEntities.ProgramPropertyInfo> q = iasyncResult.AsyncState as DataServiceQuery<Framework.DataServiceEntities.ProgramPropertyInfo>;
//                    IEnumerable<Framework.DataServiceEntities.ProgramPropertyInfo> enumerable = q.EndExecute(iasyncResult);

//                    List<Framework.DataServiceEntities.ProgramPropertyInfo> ie = q.EndExecute(iasyncResult).ToList();
                   
//                    var i = ie.FirstOrDefault((v) => v.Name == "Duration");
//                    if (i != null)
//                        _durationId = i.pvid;

//                    _ratingId = ie.FirstOrDefault((v) => v.Name == "Rating").pvid;
//                    Debug.WriteLine("RatingID =" + _ratingId);
//                    _ratingNumberId = ie.FirstOrDefault((v) => v.pname == "NumberOfRating").pvid;
//                    Debug.WriteLine("RatingNumberOf = " + _ratingNumberId);
//                    var j = ie.FirstOrDefault((v) => v.Name == "Price");
//                    if (j != null)
//                        _priceId = j.pvid;

//                };
            
//            query.BeginExecute(new AsyncCallback(ar), query);


//            //c.BeginExecute<Microsoft.WVB.Framework.DataServiceEntities.ProgramPropertyInfo>(ur, new AsyncCallback(ar), c);

            
//            //string uri = "http://localhost:8080/CDNDataService.svc/GetUserMovieRating?pid=1&userId='vmesas@hotmail.com'";

//            //if (rateHandler == null)
//            //{
//            //    rateHandler = delegate(object sender, ExecuteQueryCompletedEventArgs e)
//            //    {
//            //        if ((String)e.UserState == "R")
//            //        {
//            //            Double rate = ((IEnumerable<Double>)e.Result).FirstOrDefault();
//            //            Debug.WriteLine("rating is:" + rate);
//            //        }
//            //        else if ((String)e.UserState == "P")
//            //        {
//            //            IEnumerable<ProgramPropertyInfo> ie = e.Result as IEnumerable<ProgramPropertyInfo>;
//            //            if (ie != null)
//            //            {
//            //                var q = (from p in ie
//            //                         where (p.Name == "Rating" ||
//            //                         p.Name == "NumberOfRating")
//            //                         select new { Name = p.Name, ID = p.ID }).AsQueryable();
                            
//            //                //_durationId = ie.FirstOrDefault((pp) => pp.Name == "Duration").ID;
//            //                _ratingId = q.FirstOrDefault((v) => v.Name == "Rating").ID;
//            //                Debug.WriteLine("RatingID =" + _ratingId);
//            //                _ratingNumberId = q.FirstOrDefault((v) => v.Name == "NumberOfRating").ID;
//            //                Debug.WriteLine("RatingNumberOf = " + _ratingNumberId);
//            //                //_priceId = ie.FirstOrDefault((pp) => pp.Name == "Price").ID;
//            //            }
//            //        }
//            //    };

//            //}
//            //service.ExecuteQueryCompleted += rateHandler;
//            //service.ExecuteQueryAsync<Double>(new Uri(uri, UriKind.Absolute), "R");
//        }


//        //private object assignValue(Microsoft.WVB.Framework.DataServiceEntities.ProgramPropertyInfo p)
//        //{
//        //    switch (p.pname)
//        //    {
//        //        case "Rating":
//        //            _ratingId = p.pvid;
//        //            break;
//        //        case "NumberOfRating":
//        //            _ratingNumberId = p.pvid;
//        //            break;

//        //        default:
//        //            break;
//        //    }
//        //    return null;
//        //}

//        //[TestMethod]
//        //public void Basicrequests()
//        //{
//        //    service = dic.GetCreate<DataFeedService>();
//        //    service.ExecuteQueryCompleted += new EventHandler<ExecuteQueryCompletedEventArgs>(service_ExecuteQueryCompleted);
//        //    service.ExecuteQueryAsync<Broadcaster>("Broadcasters?$expand=Channels", "B");
//        //    service.ExecuteQueryAsync<Channel>("Channels", "C");
//        //}

//        //void service_ExecuteQueryCompleted(object sender, ExecuteQueryCompletedEventArgs e)
//        //{
//        //    if (e.UserState as String == "C")
//        //    {
//        //        IEnumerable<Channel> c = e.Result as IEnumerable<Channel>;
//        //        foreach (Channel item in c)
//        //        {
//        //            StringAssert.Equals(item.Name, "TVE");
//        //        }
//        //    }

//        //    if (e.UserState as String == "B")
//        //    {
//        //        IEnumerable<Broadcaster> b = e.Result as IEnumerable<Broadcaster>;
//        //        foreach (Broadcaster item in b)
//        //        {
//        //            CollectionAssert.AllItemsAreNotNull(item.Channels);
//        //        }
//        //    }
//        //}
//    }
//}
